package com.doupi.partner.util;

import java.util.regex.Pattern;

/**
 * 正则校验工具
 * 
 * @author Super Jens Wang
 * @version 1.0 $id: RegexUtils.java 2016年10月27日 上午11:08:53 Wang Le $
 */
public final class RegexUtils {
	/** 正则表达式句柄 */
	private final static Pattern NUMBER_PATTERN;
	private final static Pattern EMAIL_PATTERN;
	private final static Pattern PHONE_PATTERN;
	private final static Pattern MOBILE_PATTERN;
	private final static Pattern QQ_PATTERN;
	private final static Pattern CHINESE_PATTERN;
	private final static Pattern ENGLISH_PATTERN;
	private final static Pattern SPACE_PATTER;

	/** 常规正则表达式 */
	private final static String NUMBER = "^\\d+$";
	private final static String EMAIL = "^*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
	private final static String PHONE = "^\\d{3,4}[-]?\\d{7,8}$";
	private final static String MOBILE = "^\\d{11}$";
	private final static String QQ = "^\\d{5,11}$";
	private final static String CHINESE = "[\u4E00-\u9FFF]+";
	private final static String ENGLISH = "[a-zA-Z]+";
	private final static String SPACE = "[\\s\\S]";

	static {
		NUMBER_PATTERN = Pattern.compile(NUMBER);
		EMAIL_PATTERN = Pattern.compile(EMAIL);
		PHONE_PATTERN = Pattern.compile(PHONE);
		MOBILE_PATTERN = Pattern.compile(MOBILE);
		QQ_PATTERN = Pattern.compile(QQ);
		CHINESE_PATTERN = Pattern.compile(CHINESE);
		ENGLISH_PATTERN = Pattern.compile(ENGLISH);
		SPACE_PATTER = Pattern.compile(SPACE);
	}

	/**
	 * 私有构造函数防止外部实例化
	 */
	private RegexUtils() {
	}

	/**
	 * 是否是纯数字
	 * 
	 * @param input
	 *            要校验的内容
	 */
	public static boolean isNumber(String input) {
		return NUMBER_PATTERN.matcher(input).find();
	}

	/**
	 * 判断是否是邮箱
	 * 
	 * @param input
	 *            要校验的内容
	 */
	public static boolean isEmail(String input) {
		return EMAIL_PATTERN.matcher(input).find();
	}

	/**
	 * 判断是否是手机号
	 * 
	 * @param input
	 *            要校验的内容
	 */
	public static boolean isMobile(String input) {
		return MOBILE_PATTERN.matcher(input).find();
	}

	/**
	 * 判读是否是座机号码
	 * 
	 * @param input
	 *            要校验的内容
	 */
	public static boolean isPhone(String input) {
		return PHONE_PATTERN.matcher(input).find();
	}

	/**
	 * 判断是否是电话号码
	 * 
	 * @param input
	 *            要校验的内容
	 */
	public static boolean isTelephone(String input) {
		return isMobile(input) || isPhone(input);
	}

	/**
	 * 判断是否是QQ
	 * 
	 * @param input
	 *            要校验的内容
	 */
	public static boolean isQQ(String input) {
		return QQ_PATTERN.matcher(input).find();
	}

	/**
	 * 判断是否是汉字
	 * 
	 * @param input
	 *            要校验的内容
	 */
	public static boolean isChinese(String input) {
		return CHINESE_PATTERN.matcher(input).find();
	}

	/**
	 * 判读是否英文
	 * 
	 * @param input
	 *            要校验的内容
	 */
	public static boolean isEnglish(String input) {
		return ENGLISH_PATTERN.matcher(input).find();
	}

	/**
	 * 判读是否包含空格
	 * 
	 * @param input
	 *            要校验的内容
	 */
	public static boolean containSpace(String input) {
		return SPACE_PATTER.matcher(input).find();
	}
}
